home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / dev_lib / lib_com / device.h next >
C/C++ Source or Header  |  1995-05-01  |  7KB  |  269 lines

  1. /*
  2.  * DEVICE.LIB - written by Jan Kriesten 
  3.  *
  4.  * (c) 1994, 1995 by Jan Kriesten, Friedhofstr. 25 b, 35043 Marburg, Germany
  5.  *     EMail:    Maus GI
  6.  *               90:400/1002@nest.ftn
  7.  *               51:601/103@atarinet.ftn
  8.  *               2:2435/707@fidonet.org
  9.  *               kriesten@Mailer.Uni-Marburg.DE
  10.  *
  11.  * Routines for using the ports - supporting HSModem, FastSerial and
  12.  * MiNT block device routines.
  13.  * Including fast sending routines when no block device routines are
  14.  * availbable.
  15.  */
  16.  
  17. #ifndef __DEVICE_H__
  18. #define __DEVICE_H__
  19.  
  20. /*--- includes              ---*/
  21.  
  22. /*--- defines               ---*/
  23.  
  24. #define        IO_I_BUFFER        1L        /* Inbound buffer        */
  25. #define        IO_O_BUFFER        2L        /* Outbound buffer        */
  26. #define        IO_BUFFERS        3L        /* Both buffers            */
  27.  
  28. /*
  29.  * Definitions for the port protocol:
  30.  */
  31. #define        _1STOP            0x0001
  32. #define        _15STOP            0x0002
  33. #define        _2STOP            0x0003
  34.  
  35. #define        _8BIT            0x0000
  36. #define        _7BIT            0x0004
  37. #define        _6BIT            0x0008
  38. #define        _5BIT            0x000c
  39.  
  40. #define        _NO_HNDSHAKE    0x0000
  41. #define        _XONXOFF        0x1000
  42. #define        _RTSCTS            0x2000
  43.  
  44. #define        _NO_PARITY        0x0000
  45. #define        _EVENP            0x4000
  46. #define        _ODDP            0x8000
  47.  
  48. /*--- types                 ---*/
  49.  
  50. typedef struct _dev_list
  51. {
  52.     BYTE                *name;        /* Device name            */
  53.     LONG                curr_dte;    /* current DTE rate        */
  54.     struct _dev_list    *next;        /* Pointer to next dev    */
  55. } DEV_LIST;
  56.  
  57. /*--- variables             ---*/
  58.  
  59. /*--- prototypes            ---*/
  60.  
  61. /*
  62.  * InitDevices:
  63.  *        To be called at the beginning of the program to initialize
  64.  *        the all routines.
  65.  *
  66.  * Parameters:
  67.  *        pause_normal: Routine to spent some time or NULL.
  68.  *        pause_super : same as normal, but will be called from 
  69.  *                      supervise modus!
  70.  */
  71. GLOBAL DEV_LIST    *InitDevices    ( VOID *pause_normal, VOID *pause_super );
  72.  
  73. /*
  74.  * TermDevices:
  75.  *        Frees all memory allocated during initialization. Devicelist
  76.  *        is no longer valid after calling this routine.
  77.  *        Just to be called before exiting the program.
  78.  */
  79. GLOBAL VOID        TermDevices        ( VOID );
  80.  
  81. /*
  82.  * Open-/CloseDevice:
  83.  *        The given port will be initialized and the speedlist will be
  84.  *        created. Returns TRUE if everything went well and the Device
  85.  *        could be opened. FALSE is returned if the Device is already in
  86.  *        use or memory allocation failed ...
  87.  */
  88. GLOBAL BOOLEAN    OpenDevice        ( DEV_LIST *port );
  89. GLOBAL VOID        CloseDevice        ( DEV_LIST *port );
  90.  
  91. /*
  92.  * GetBiosNr:
  93.  *        Returns the corresponding bios number for the device or -1
  94.  *        if the device isn't known by the bios. Should only be used
  95.  *        if you have to transfer the bios number as a parameter to
  96.  *        another program.
  97.  */
  98. GLOBAL WORD        GetBiosNr        ( DEV_LIST *port );
  99.  
  100. /*
  101.  * PortParameter:
  102.  *        Sets the parameters for the port. You don't need to call
  103.  *        this routine if you wish to run 8N1 + RTS/CTS handshake.
  104.  *
  105.  * flowctl:        _RTSCTS (default)
  106.  *                _XONXOFF
  107.  *                _NO_HNDSHAKE
  108.  * charlen:        _8BIT (default)
  109.  *                _7BIT
  110.  *                _6BIT
  111.  *                _5BIT
  112.  * stopbits:    _1STOP (default)
  113.  *                _15STOP
  114.  *                _2STOP
  115.  * parity:        _NO_PARITY (default)
  116.  *                _EVENP
  117.  *                _ODDP
  118.  */
  119. GLOBAL VOID        PortParameter    ( DEV_LIST *port, UWORD flowctl, UWORD charlen, UWORD stopbits, UWORD parity );
  120.  
  121. /*
  122.  * GetSpeedList:
  123.  *        Returns the speedlist for the corresponding device. The 
  124.  *        return value is only defined for _open_ devices!
  125.  *        The speedlist is an array of long values (from higher dte-
  126.  *        rates to lower). The end of the list is specified by a
  127.  *        speed of -1L.
  128.  */
  129. GLOBAL LONG        *GetSpeedList    ( DEV_LIST *port );
  130.  
  131. /*
  132.  * SetDTESpeed:
  133.  *        Sets the DTE speed to `speed'. If `speed' isn't available,
  134.  *        the current DTE is returned.
  135.  *        In all cases the new DTE speed is returned by the function.
  136.  *        Just call this function for open devices!
  137.  */
  138. GLOBAL LONG     SetDTESpeed        ( DEV_LIST *port, LONG speed );
  139.  
  140. /*
  141.  * PortSendByte:
  142.  *        Sends character `c' to the port `port'.
  143.  */
  144. GLOBAL BOOLEAN    PortSendByte    ( DEV_LIST *port, BYTE c );
  145.  
  146. /*
  147.  * PortSendBlock:
  148.  *        Sends `len' characters from `block' to device `port'. 
  149.  *        If `tst_dcd' is TRUE, the carrier is checked during sending.
  150.  */
  151. GLOBAL BOOLEAN    PortSendBlock    ( DEV_LIST *port, BYTE *block, LONG len, BOOLEAN tst_dcd );
  152.  
  153. /*
  154.  * PortGetByte:
  155.  *        Returns the next available character. While no character is
  156.  *        available the function pause_1 is called.
  157.  *        The routine will not pause, if there's no carrier available!
  158.  */
  159. GLOBAL WORD        PortGetByte        ( DEV_LIST *port );
  160.  
  161. /*
  162.  * PortPeekByte:
  163.  *        Returns the next available character _without_ actually read
  164.  *        it from the port (i.e. the character is still available from
  165.  *        port).
  166.  *        If no char is available, -1 is returned.
  167.  */
  168. GLOBAL WORD        PortPeekByte    ( DEV_LIST *port );
  169.  
  170. /*
  171.  * OutIsEmpty:
  172.  *        Checks, if the outbound iorec buffer is empty.
  173.  */
  174. GLOBAL BOOLEAN    OutIsEmpty        ( DEV_LIST *port );
  175.  
  176. /*
  177.  * WaitOutEmpty:
  178.  *        Waits, until the outbound iorec buffer is empty. If tst_dcd
  179.  *        is set to TRUE, the carrier is checked while waiting.
  180.  *        If wait_hundreds is != 0, WaitOutEmpty waits a maximum time
  181.  *        of wait_hundreds hundreds seconds. If the outbound buffer is
  182.  *        not empty  in this period, the outbound buffer is cleared.
  183.  */
  184. GLOBAL BOOLEAN    WaitOutEmpty    ( DEV_LIST *dev, BOOLEAN tst_dcd, UWORD wait_hundreds );
  185.  
  186. /*
  187.  * CharAvailable:
  188.  *        Returns TRUE if a char is available from `port', else FALSE.
  189.  */
  190. GLOBAL BOOLEAN    CharAvailable    ( DEV_LIST *port );
  191.  
  192. /*
  193.  * ClearIOBuffer:
  194.  *        Clears the IO buffer `which' from device port.
  195.  *        IO_I_BUFFER:    Inbound buffer;
  196.  *        IO_O_BUFFER:    Outbound buffer;
  197.  *        IO_BUFFERS:        Both buffers;
  198.  */
  199. GLOBAL VOID        ClearIOBuffer    ( DEV_LIST *port, LONG which );
  200.  
  201. /*
  202.  * DtrOn:
  203.  * DtrOff:
  204.  *        Sets/Unsets the DTR of port `port'.
  205.  */
  206. GLOBAL VOID        DtrOn            ( DEV_LIST *port );
  207. GLOBAL VOID        DtrOff            ( DEV_LIST *port );
  208.  
  209. /*
  210.  * IsCarrier:
  211.  *        Returns TRUE if carrier on port `port' is available, else
  212.  *        FALSE;
  213.  */
  214. GLOBAL BOOLEAN    IsCarrier        ( DEV_LIST *port );
  215.  
  216. /*
  217.  * StartReceiver:
  218.  * StopReceiver:
  219.  *        Enables/disables the reiceiver. 
  220.  *        StopReceiver should be used before disk access and
  221.  *        StartReceiver after finished disk i/o.
  222.  */
  223. GLOBAL VOID        StartReceiver    ( DEV_LIST *port );
  224. GLOBAL VOID        StopReceiver    ( DEV_LIST *port );
  225.  
  226. /*
  227.  * Set/Get*xBuffer:
  228.  *        Sets/returns the size of the inbound/outbound iorec
  229.  *        buffers.
  230.  */
  231. GLOBAL WORD        SetRxBuffer        ( DEV_LIST *port, WORD size );
  232. GLOBAL WORD        GetRxBuffer        ( DEV_LIST *port );
  233. GLOBAL WORD        SetTxBuffer        ( DEV_LIST *port, WORD size );
  234. GLOBAL WORD        GetTxBuffer        ( DEV_LIST *port );
  235.  
  236. /*
  237.  * Misceallaneous functions:
  238.  */
  239.  
  240. /*
  241.  * get_tos:
  242.  *        returns TOS version
  243.  */
  244. GLOBAL    WORD    get_tos            ( VOID );
  245.  
  246. /*
  247.  * getcookie:
  248.  *        searches `cookie' in the cookie jar. If found TRUE is
  249.  *        returned. `value' then holds the value of the found
  250.  *        cookie.
  251.  */
  252. GLOBAL    BOOLEAN    getcookie        ( LONG cookie, LONG *value );
  253.  
  254. /*
  255.  * Get200Hz:
  256.  *        returns the value of the 200Hz hardware counter.
  257.  */
  258. GLOBAL    ULONG    Get200Hz        ( VOID );
  259.  
  260. /*
  261.  * Calc200Hz:
  262.  *        returns the value the 200Hz hardware counter will have
  263.  *        after `time_to_set' hundreds seconds.
  264.  */
  265. GLOBAL    ULONG    Calc200Hz        ( ULONG time_to_set );
  266.  
  267. /*--- End of device.h module  ---*/
  268. #endif
  269.